'''Simple data loader module.

Loads data files from the "data" directory shipped with a game.

Enhancing this to handle caching etc. is left as an exercise for the reader.
'''

import os
import pyglet

data_py = os.path.abspath(os.path.dirname(__file__))
data_dir = os.path.normpath(os.path.join(data_py, '..', 'data'))
_images = {}
_sounds = {}

def filepath(filename):
    '''Determine the path to a file in the data directory.
    '''
    return os.path.join(data_dir, filename)

def load(filename, mode='rb'):
    '''Open a file in the data directory.

    "mode" is passed as the second arg to open().
    '''
    return open(os.path.join(data_dir, filename), mode)

def image(filename):
    """Return an image loaded from the data directory"""
    global _images
    if filename not in _images:
        _images[filename] = pyglet.image.load(filepath(filename))
    return _images[filename]

def sound(filename):
    """Return a sound loaded from the data directory"""
    global _sounds
    if filename not in _sounds:
        _sounds[filename] = pyglet.media.load(filepath(filename), streaming=False)
    return _sounds[filename]

def texture(filename):
    """Return a texture loaded from the data directory"""
    return image(filename).get_texture()
